﻿<p>A property with an enumerated value, <em>IfcPropertyEnumeratedValue</em>, defines a property
object which has a value assigned that is chosen from an enumeration. It defines a property - value combination for which
the property <em>Name</em>, an optional <em>Description</em>, the optional <em>EnumerationValues</em>
with measure type and optionally an <em>Unit</em> is given.</p>

<blockquote class="note">
NOTE&nbsp; Multiple choices from the property enumeration are supported.
</blockquote>

<p>The unit is handled by the <em>Unit</em> attribute, see Table 3 for an example of a enumerated property:</p>
<ul>
<li>If the <em>Unit</em> attribute is not given, then the unit is already implied by the type of <em>IfcMeasureValue</em> or
<em>IfcDerivedMeasureValue</em>. The associated unit can be found at the <em>IfcUnitAssignment</em> globally defined at the project
level (<em>IfcProject.UnitsInContext</em>).</li>
<li>If the <em>Unit</em> attribute is given, then the unit assigned by the unit attribute overrides the globally assigned unit.</li>
</ul>
<p>More precisely: The <em>IfcPropertyEnumeratedValue</em> defines a property, which value is selected from a defined list of
enumerators. The enumerators are stored in a dynamic enumeration of values including the type information from <em>IfcValue</em>
(see <em>IfcPropertyEnumeration</em>). This enables applications to use an enumeration value as a property within a property set
(<em>IfcPropertySet</em>) including the allowed list of values. </p>

<blockquote class="note">
NOTE&nbsp; An <em>IfcPropertyEnumeratedValue</em> may be exchanged with no values assigned yet. In this case the <em>EnumerationValues</em> are set to NIL.
</blockquote>

<p>&nbsp;</p>
<table>
 <tr>
  <td>
   <table class="gridtable">
    <tr valign="top">
     <th width="15%">Name</th>
     <th width="30%">Value<br> <span style="font-size:smaller">(EnumerationValue)</span></th>
     <th width="25%">Type<br> <span style="font-size:smaller">(through&nbsp;IfcValue)</span></th>
     <th width="30%">IfcPropertyEnumeration<br> <span style="font-size:smaller">(Name)</span></th>
    </tr>
    <tr>
     <td>BladeAction</td>
     <td>Opposed</td>
     <td><em>IfcLabel</em></td>
     <td>DamperBladeActionEnum</td>
    </tr>
    <tr>
     <td>BladeAction</td>
     <td>Parallel</td>
     <td><em>IfcLabel</em></td>
     <td>DamperBladeActionEnum</td>
    </tr>
   </table>
  </td>
 </tr>
 <tr>
  <td><p class="table">Table 3 &mdash; Enumerated property with values, measure types and units</td>
 </tr>
</table>
<p>&nbsp;</p>

<p>The <em>IfcPropertyEnumeratedValue</em> refers to an <em>IfcPropertyEnumeration</em>, see Table 4 for an example:</p>
<table>
 <tr>
  <td>
   <table class="gridtable">
    <tr valign="top">
     <th width="30%"><b>Name</b></th>
     <th width="30%"><b>EnumerationValues</b></th>
     <th width="25%"><b>Type<br></b> <span style="font-size:smaller">(through IfcValue)</span></th>
     <th width="15%"><b>Unit</b></th>
    </tr>
    <tr valign="top">
     <td>DamperBladeActionEnum</td>
     <td>(Parallel, Opposed, Other, Unset)</td>
     <td><em>IfcString</em></td>
     <td>-</td>
    </tr>
   </table>
  </td>
 </tr>
 <tr>
  <td><p class="table">Table 4 &mdash; Property enumeration with enumerators</td>
 </tr>
</table>
</blockquote>

<p>It is not mandatory to use an instance of <em>IfcPropertyEnumeration</em> to hold the applicable values for
<em>IfcPropertyEnumeratedValue</em>, however this is the preferred way. A single instance of <em>IfcPropertyEnumeration</em> can be
referenced by multiple instances of <em>IfcPropertyEnumeratedValue</em>.</p>

<blockquote class="history">
HISTORY&nbsp; New entity in IFC2.0.
</blockquote>
<blockquote class="change-ifc2x">
IFC2x CHANGE&nbsp; Entity has been renamed from IfcEnumeratedProperty
</blockquote>
<blockquote class="change-ifc2x4">
IFC4 CHANGE&nbsp; Attribute <em>EnumerationValues</em> has been made OPTIONAL with upward
compatibility for file based exchange.
</blockquote>